package com.mashibing.mq;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * @Author: JLL
 * @Date: 2020/2/15 10:49
 */
public class SenderTopic {

    public static void main(String[] args) throws Exception{

        //1、获得连接工厂
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                "admin",
                "admin",
                "tcp://localhost:61616"
        );
        //2、从工厂里拿连接
        Connection connection = connectionFactory.createConnection();
        // 3.获取session
        /**
         * createSession第一个参数就是事务
         */
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 4. 找目的地，获取destination，消费端，也会从这个目的地取消息
        //这里的目的有2种，一个是queue 一个是topic
//        Queue queue = session.createQueue("user");

        //临时topic 或者临时queue的意思是，我临时的从MQ上取点东西。只对当前connection有效，别的connection无法访问这里创建的消息
        // 也就是 临时创建的 生命周期 和 隔离的特性都是当前connection下才有效
        Destination topic = session.createTopic("user");
        // 5.1.消息创建者
        MessageProducer producer = session.createProducer(topic);
//        	producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); //这里是配置成 不持久化
        // consumer -> 消费者
        // producer -> 创建者
        // 5.2. 创建消息

        for (int i = 0; i < 100; i++) {

            TextMessage textMessage = session.createTextMessage("hi: " + i);

            // 5.3 向目的地写入消息

            if(i % 4 == 0) {
                // 设置消息的优先级
                // 对producer 整体设置
                //	producer.setPriority(9); 9的优先级是最高的，最容易被消费
//                producer.send(textMessage,DeliveryMode.PERSISTENT,9,1000 * 100);
                textMessage.setJMSPriority(9);
            }

            //如果开启事务了的话，只要session不commit，不管怎么send，这消息都发不了
            producer.send(textMessage);
            //	Thread.sleep(3000);

//            session.commit();
        }

        // 6.关闭连接
        connection.close();

        System.out.println("System exit....");



    }



}
